home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / Delta Music disk 1.adf / FINAL / replay.S < prev   
Text File  |  2014-06-18  |  16KB  |  804 lines

  1. ; -------------------------------------------
  2. ; ----      DELTA MUSIC REPLAY V1.0      ----
  3. ; ----      ~~~~~~~~~~~~~~~~~~~~~~~      ----
  4. ; ----                                   ----
  5. ; ----  coded by : Bent Nielsen (SHOGUN) ----
  6. ; ----             Kyradservej 19B       ----
  7. ; ----             8700 Horsens          ----
  8. ; ----             Denmark               ----
  9. ; ----       tlf.  75-601-868            ----
  10. ; -------------------------------------------
  11. ; ---- contact me if you want the editor ----
  12. ; ---- sources coded .........           ----
  13. ; -------------------------------------------
  14.  
  15. org $40000
  16. load $40000
  17.  
  18. speed = 6    ; play speed
  19.  
  20. ; ////  hardware  \\\\
  21. h_sound     = 0
  22. h_length    = 4
  23. h_frequency = 6
  24. h_volume    = 8
  25.  
  26. ; ////  instrument  \\\\
  27. s_attack_step     = 0
  28. s_attack_delay    = 1
  29. s_decay_step      = 2
  30. s_decay_delay     = 3
  31. s_sustain         = 4
  32. s_release_step    = 6
  33. s_release_delay   = 7
  34. s_volume          = 8
  35. s_vibrator_wait   = 9
  36. s_vibrator_step   = 10
  37. s_vibrator_length = 11
  38. s_bendrate        = 12
  39. s_portamento      = 13
  40. s_sample          = 14
  41. s_table_delay     = 15
  42. s_arpeggio        = 16
  43. s_sound_length    = 24
  44. s_repeat          = 26
  45. s_repeat_length   = 28
  46. s_table           = 30
  47. s_sounddata       = 78
  48.  
  49. ; ////  channel  \\\\
  50. c_hardware        = 0
  51. c_dma             = 4
  52. c_sounddata       = 6
  53. c_frequency       = 10
  54. c_sound_table     = 12
  55. c_sound_table_cnt = 16
  56. c_sound_table_del = 17
  57. c_track           = 18
  58. c_track_cnt       = 22
  59. c_block           = 24
  60. c_block_cnt       = 28
  61. c_vibrator_wait   = 32
  62. c_vibrator_length = 33
  63. c_vibrator_pos    = 34
  64. c_vibrator_cmp    = 35
  65. c_vibrator_freq   = 36
  66. c_old_frequency   = 38
  67. c_frequency_data  = 40
  68. c_actual_volume   = 41
  69. c_attack_delay    = 42
  70. c_decay_delay     = 43
  71. c_sustain         = 44
  72. c_release_delay   = 46
  73. c_play_speed      = 47
  74. c_bendrate_freq   = 48
  75. c_transpose       = 50
  76. c_status          = 51
  77. c_arpeggio_cnt    = 52
  78. c_arpeggio_data   = 53
  79. c_arpeggio_on     = 54
  80. c_effect_number   = 55
  81. c_effect_data     = 56
  82. ; next 57
  83.  
  84. DELTA_MUSIC:
  85.     cmp.l    #"ALL ",data    ; test for loaded module
  86.     bne.s    error
  87. ;    bset    #1,$bfe001    ; power on/off
  88.     lea    $dff000,a5
  89.     bsr    DM_init        ; init music
  90. raster1:
  91.     cmp.b    #100,$6(a5)
  92.     bne.s    raster1
  93. raster2:
  94.     cmp.b    #101,$6(a5)
  95.     bne.s    raster2
  96.     move.w    #$0f0,$180(a5)
  97.     bsr.s    DM_play        ; play music
  98.     move.w    #0,$180(a5)
  99.     btst    #6,$bfe001    ; wait for mouse
  100.     bne.s    raster1
  101.     move.w    #$f,$96(a5)    ; stop all sound
  102.     bclr    #1,$bfe001    ; power on
  103. error:
  104.     rts
  105.  
  106.  
  107. DM_play:
  108.     movem.l    d0-d7/a0-a6,-(a7)
  109.     lea    channel1(pc),a6
  110.     bsr.L    DM_calc_frequency
  111.     lea    channel2(pc),a6
  112.     bsr.L    DM_calc_frequency
  113.     lea    channel3(pc),a6
  114.     bsr.L    DM_calc_frequency
  115.     lea    channel4(pc),a6
  116.     bsr.L    DM_calc_frequency
  117.  
  118.     move.w    #$800f,$dff096
  119. DM_sample_handler:
  120.     move.w    #200,d0
  121. DM_swait:
  122.     dbra    d0,DM_swait
  123.  
  124.     lea    channel1(pc),a6
  125.     move.l    c_hardware(a6),a4
  126.     move.l    c_sounddata(a6),a5
  127.     tst.b    s_sample(a5)
  128.     beq.s    DM_no_sample1
  129.     move.w    s_repeat_length(a5),h_length(a4)
  130.     moveq    #0,d7
  131.     move.w    s_repeat(a5),d7
  132.     add.l    a5,d7
  133.     add.l    #s_table,d7
  134.     move.l    d7,h_sound(a4)
  135. DM_no_sample1:
  136.  
  137.     lea    channel2(pc),a6
  138.     move.l    c_hardware(a6),a4
  139.     move.l    c_sounddata(a6),a5
  140.     tst.b    s_sample(a5)
  141.     beq.s    DM_no_sample2
  142.     move.w    s_repeat_length(a5),h_length(a4)
  143.     moveq    #0,d7
  144.     move.w    s_repeat(a5),d7
  145.     add.l    a5,d7
  146.     add.l    #s_table,d7
  147.     move.l    d7,h_sound(a4)
  148. DM_no_sample2:
  149.  
  150.     lea    channel3(pc),a6
  151.     move.l    c_hardware(a6),a4
  152.     move.l    c_sounddata(a6),a5
  153.     tst.b    s_sample(a5)
  154.     beq.s    DM_no_sample3
  155.     move.w    s_repeat_length(a5),h_length(a4)
  156.     moveq    #0,d7
  157.     move.w    s_repeat(a5),d7
  158.     add.l    a5,d7
  159.     add.l    #s_table,d7
  160.     move.l    d7,h_sound(a4)
  161. DM_no_sample3:
  162.  
  163.     lea    channel4(pc),a6
  164.     move.l    c_hardware(a6),a4
  165.     move.l    c_sounddata(a6),a5
  166.     tst.b    s_sample(a5)
  167.     beq.s    DM_no_sample4
  168.     move.w    s_repeat_length(a5),h_length(a4)
  169.     moveq    #0,d7
  170.     move.w    s_repeat(a5),d7
  171.     add.l    a5,d7
  172.     add.l    #s_table,d7
  173.     move.l    d7,h_sound(a4)
  174. DM_no_sample4:
  175.     movem.l    (a7)+,d0-d7/a0-a6
  176.     rts
  177.  
  178.  
  179. DM_calc_frequency:
  180.     move.l    c_hardware(a6),a4
  181.     move.l    c_sounddata(a6),a5
  182.  
  183.     subq.b    #1,c_play_speed(a6)
  184.     bne.L    DM_block_con
  185.     move.b    play_speed,c_play_speed(a6)
  186.  
  187.     tst.l    c_block_cnt(a6)
  188.     bne.s    DM_check_block
  189. DM_track_step:
  190.     move.l    c_track(a6),a0
  191.     move.w    c_track_cnt(a6),d7
  192.     move.w    (a0,d7.w),d0
  193.     cmp.w    #-1,d0
  194.     bne.s    DM_track_con
  195.     move.w    2(a0,d7.w),d0
  196.     and.w    #$7ff,d0
  197.     asl.w    #1,d0
  198.     move.w    d0,c_track_cnt(a6)
  199.     bra.s    DM_track_step
  200. DM_track_con:
  201.     move.b    d0,c_transpose(a6)
  202.     asr.l    #2,d0
  203.     and.l    #%00000000000000000011111111000000,d0
  204.     add.l    blocks(pc),d0
  205.     move.l    d0,c_block(a6)
  206.     addq.w    #2,c_track_cnt(a6)
  207.  
  208. DM_check_block:
  209.     move.l    c_block(a6),a0
  210.     add.l    c_block_cnt(a6),a0
  211.  
  212.     tst.b    2(a0)
  213.     beq.s    DM_no_new_effect
  214.     move.b    2(a0),c_effect_number(a6)
  215.     move.b    3(a0),c_effect_data(a6)
  216.  
  217. DM_no_new_effect:
  218.     moveq    #0,d0
  219.     move.b    1(a0),d0
  220.     beq.L    DM_test_effect
  221.     add.b    c_transpose(a6),d0
  222.     move.b    d0,c_frequency_data(a6)
  223.  
  224.     move.w    c_dma(a6),d0
  225.     sub.w    #$8000,d0
  226.     move.w    d0,$dff096
  227.  
  228.     moveq    #0,d0
  229.     move.b    d0,c_status(a6)
  230.     move.w    d0,c_bendrate_freq(a6)
  231.     move.w    d0,c_arpeggio_cnt(a6)
  232.     move.b    d0,c_arpeggio_on(a6)
  233.  
  234.     move.b    2(a0),c_effect_number(a6)
  235.     move.b    3(a0),c_effect_data(a6)
  236.  
  237.     lea    snd_table(pc),a1
  238.     move.b    (a0),d0
  239.     asl.l    #2,d0
  240.     move.l    (a1,d0.l),d0
  241.     move.l    d0,c_sounddata(a6)
  242.  
  243.     move.l    d0,a5
  244.     add.l    #s_table,d0
  245.     move.l    d0,c_sound_table(a6)
  246.     clr.b    c_sound_table_cnt(a6)
  247.     tst.b    s_sample(a5)
  248.     beq.s    DM_no_sample_clear
  249.     clr.w    s_table(a5)
  250.     move.l    d0,h_sound(a4)
  251. DM_no_sample_clear:
  252.  
  253.     move.w    s_sound_length(a5),d0
  254.     asr.w    #1,d0
  255.     move.w    d0,h_length(a4)
  256.  
  257.     move.b    s_vibrator_wait(a5),c_vibrator_wait(a6)
  258.     move.b    s_vibrator_length(a5),d0
  259.     move.b    d0,c_vibrator_length(a6)
  260.     move.b    d0,c_vibrator_pos(a6)
  261.     asl.b    #1,d0
  262.     move.b    d0,c_vibrator_cmp(a6)
  263.     clr.b    c_actual_volume(a6)
  264.     clr.b    c_sound_table_del(a6)
  265.     clr.b    c_sound_table_cnt(a6)
  266.     clr.b    c_attack_delay(a6)
  267.     clr.b    c_decay_delay(a6)
  268.     move.w    s_sustain(a5),c_sustain(a6)
  269.     clr.b    c_release_delay(a6)
  270.  
  271. DM_test_effect:
  272.     addq.l    #4,c_block_cnt(a6)
  273.     cmp.l    #64,c_block_cnt(a6)
  274.     bne.s    DM_block_con
  275.     clr.l    c_block_cnt(a6)
  276. DM_block_con:
  277.  
  278.     tst.b    s_sample(a5)
  279.     bne.s    DM_portamento_handler
  280.     tst.b    c_sound_table_del(a6)
  281.     beq.s    DM_sound_table_handler
  282.     subq.b    #1,c_sound_table_del(a6)
  283.     bra.s    DM_portamento_handler
  284.  
  285. DM_sound_table_handler:
  286.     move.b    s_table_delay(a5),c_sound_table_del(a6)
  287.  
  288. DM_sound_read_again:
  289.     move.l    c_sound_table(a6),a0
  290.     moveq    #0,d6
  291.     move.b    c_sound_table_cnt(a6),d6
  292.     cmp.b    #48,d6
  293.     bmi.s    DM_sound_read_c
  294.     clr.b    c_sound_table_cnt(a6)
  295.     moveq    #0,d6
  296. DM_sound_read_c:
  297.     add.l    d6,a0
  298.     moveq    #0,d7
  299.     move.b    (a0),d7
  300.  
  301.     bpl.s    DM_new_sounddata
  302.     cmp.b    #$ff,d7
  303.     bne.s    DM_sound_new_speed
  304.     move.b    1(a0),d7
  305.     move.b    d7,c_sound_table_cnt(a6)
  306.     bra.s    DM_sound_read_again
  307. DM_sound_new_speed:
  308.     and.b    #127,d7
  309.     move.b    d7,s_table_delay(a5)    
  310.     addq.b    #1,c_sound_table_cnt(a6)
  311.     bra.s    DM_sound_read_again
  312.  
  313. DM_new_sounddata:
  314.     asl.l    #5,d7
  315.     add.l    #s_sounddata,d7
  316.     add.l    c_sounddata(a6),d7
  317.     move.l    d7,h_sound(a4)        ; Set hardware sound data
  318.     addq.b    #1,c_sound_table_cnt(a6)
  319.  
  320. DM_portamento_handler:
  321.     tst.b    s_portamento(a5)
  322.     beq.s    DM_vibrator_handler
  323.     move.w    c_frequency(a6),d1
  324.     bne.s    DM_porta_con
  325.     moveq    #0,d0
  326.     lea    freq_table(pc),a1
  327.     move.b    c_frequency_data(a6),d0
  328.     asl.w    #1,d0
  329.     move.w    (a1,d0.w),d0
  330.     add.w    c_bendrate_freq(a6),d0
  331.     move.w    d0,c_frequency(a6)
  332.     bra.s    DM_vibrator_handler
  333.  
  334. DM_porta_con:
  335.     moveq    #0,d0
  336.     moveq    #0,d2
  337.     move.b    s_portamento(a5),d2
  338.     lea    freq_table(pc),a1
  339.     move.b    c_frequency_data(a6),d0
  340.     asl.w    #1,d0
  341.     move.w    (a1,d0.w),d0
  342.     add.w    c_bendrate_freq(a6),d0
  343.     cmp.w    d0,d1
  344.     beq.s    DM_vibrator_handler
  345.     blo.s    DM_porta_low
  346.     sub.w    d2,d1
  347.     cmp.w    d0,d1
  348.     bpl.s    DM_porta_high_con
  349.     move.w    d0,c_frequency(a6)
  350.     bra.s    DM_vibrator_handler
  351. DM_porta_high_con:
  352.     move.w    d1,c_frequency(a6)
  353.     bra.s    DM_vibrator_handler
  354. DM_porta_low:
  355.     add.w    d2,d1
  356.     cmp.w    d0,d1
  357.     bmi.s    DM_porta_low_con
  358.     move.w    d0,c_frequency(a6)
  359.     bra.s    DM_vibrator_handler
  360. DM_porta_low_con:
  361.     move.w    d1,c_frequency(a6)
  362.  
  363.  
  364. DM_vibrator_handler:
  365.     tst.b    c_vibrator_wait(a6)
  366.     beq.s    DM_calc_vibrator
  367.     subq.b    #1,c_vibrator_wait(a6)
  368.     bra.s    DM_bendrate_handler
  369. DM_calc_vibrator:
  370.     moveq    #0,d0
  371.     moveq    #0,d1
  372.     move.b    c_vibrator_pos(a6),d0
  373.     move.b    d0,d2
  374.     move.b    s_vibrator_step(a5),d1
  375.     mulu    d1,d0
  376.     move.w    d0,c_vibrator_freq(a6)
  377.  
  378.     btst    #0,c_status(a6)
  379.     bne.s    DM_vibrator_minus
  380. DM_vibrator_plus:
  381.     addq.b    #1,d2
  382.     cmp.b    c_vibrator_cmp(a6),d2
  383.     bne.s    DM_vibrator_no_reset
  384.     eor.b    #1,c_status(a6)
  385. DM_vibrator_no_reset:
  386.     move.b    d2,c_vibrator_pos(a6)
  387.     bra.s    DM_bendrate_handler
  388.  
  389. DM_vibrator_minus:
  390.     subq.b    #1,d2
  391.     bne.s    DM_vibrator_no_reset2
  392.     eor.b    #1,c_status(a6)
  393. DM_vibrator_no_reset2:
  394.     move.b    d2,c_vibrator_pos(a6)
  395.  
  396. DM_bendrate_handler:
  397.     moveq    #0,d0
  398.     move.l    c_sounddata(a6),a1
  399.     move.b    s_bendrate(a1),d0
  400.     bpl.s    DM_rate_minus
  401.     neg.b    d0
  402.  
  403.     add.w    d0,c_bendrate_freq(a6)
  404.     bra.s    DM_effect_handler
  405.  
  406. DM_rate_minus:
  407.     sub.w    d0,c_bendrate_freq(a6)
  408.  
  409. DM_effect_handler:
  410.     moveq    #0,d0
  411.     moveq    #0,d1
  412.     move.b    c_effect_data(a6),d0
  413.     move.b    c_effect_number(a6),d1
  414.     lea    effect_table(pc),a1
  415.     and.b    #$1f,d1
  416.     asl.l    #2,d1
  417.     move.l    (a1,d1.w),a1
  418.     jsr    (a1)
  419.  
  420. DM_arpeggio_handler:
  421.     move.l    a5,a1
  422.     add.l    #s_arpeggio,a1
  423.     move.b    c_arpeggio_cnt(a6),d0
  424.     move.b    (a1,d0.b),d1
  425.     addq.b    #1,c_arpeggio_cnt(a6)
  426.     and.b    #%00000111,c_arpeggio_cnt(a6)
  427.  
  428. DM_store_frequency:
  429.     moveq    #0,d0
  430.     lea    freq_table(pc),a1
  431.     move.b    c_frequency_data(a6),d0
  432.     add.b    d1,d0
  433.     asl.w    #1,d0
  434.     move.w    (a1,d0.w),d0
  435.  
  436.     moveq    #0,d1
  437.     moveq    #0,d2
  438.     move.b    c_vibrator_length(a6),d1
  439.     move.b    s_vibrator_step(a5),d2
  440.     mulu    d2,d1
  441.     sub.w    d1,d0
  442.     add.w    c_bendrate_freq(a6),d0
  443.     tst.b    s_portamento(a5)
  444.     beq.s    DM_store_no_port
  445.     move.w    c_frequency(a6),d0
  446.     bra.s    DM_store_port
  447. DM_store_no_port:
  448.     clr.w    c_frequency(a6)
  449. DM_store_port:
  450.     add.w    c_vibrator_freq(a6),d0
  451.     move.w    d0,h_frequency(a4)
  452.  
  453. DM_volume_handler:
  454.     moveq    #0,d1        ; actual volume
  455.     move.b    c_actual_volume(a6),d1
  456.  
  457.     move.b    c_status(a6),d0
  458.     and.b    #%00001110,d0
  459.  
  460.     tst.b    d0
  461.     bne.s    DM_test_decay
  462.  
  463.     tst.b    c_attack_delay(a6)
  464.     beq.s    DM_attack_handler
  465.     subq.b    #1,c_attack_delay(a6)
  466.     bra.L    DM_volume_exit
  467. DM_attack_handler:
  468.     move.b    s_attack_delay(a5),c_attack_delay(a6)
  469.     add.b    s_attack_step(a5),d1
  470.     cmp.b    #64,d1
  471.     blo.s    DM_attack_con
  472.     or.b    #%00000010,d0
  473.     or.b    #%00000010,c_status(a6)
  474.     move.b    #64,d1
  475. DM_attack_con:
  476.  
  477.  
  478. DM_test_decay:
  479.     cmp.b    #%00000010,d0
  480.     bne.s    DM_test_sustain
  481.  
  482.     tst.b    c_decay_delay(a6)
  483.     beq.s    DM_decay_handler
  484.     subq.b    #1,c_decay_delay(a6)
  485.     bra.s    DM_volume_exit
  486. DM_decay_handler:
  487.     move.b    s_decay_delay(a5),c_decay_delay(a6)
  488.     move.b    s_volume(a5),d2
  489.     sub.b    s_decay_step(a5),d1
  490.     cmp.b    d2,d1
  491.     bhi.s    DM_decay_con
  492.     move.b    s_volume(a5),d1
  493.     or.b    #%00000110,d0
  494.     or.b    #%00000110,c_status(a6)
  495. DM_decay_con:
  496.  
  497. DM_test_sustain:
  498.     cmp.b    #%00000110,d0
  499.     bne.s    DM_test_release
  500.  
  501.     tst.w    c_sustain(a6)
  502.     beq.s    DM_sustain_handler
  503.     subq.w    #1,c_sustain(a6)
  504.     bra.s    DM_volume_exit
  505. DM_sustain_handler:
  506.     or.b    #%00001110,d0
  507.     or.b    #%00001110,c_status(a6)
  508.  
  509. DM_test_release:
  510.     cmp.b    #%00001110,d0
  511.     bne.s    DM_volume_exit
  512.  
  513.     tst.b    c_release_delay(a6)
  514.     beq.s    DM_release_handler
  515.     subq.b    #1,c_release_delay(a6)
  516.     bra.s    DM_volume_exit
  517. DM_release_handler:
  518.     move.b    s_release_delay(a5),c_release_delay(a6)
  519.     sub.b    s_release_step(a5),d1
  520.     bpl.s    DM_release_con
  521.     and.b    #%00001001,c_status(a6)
  522.     moveq    #0,d1
  523. DM_release_con:
  524.  
  525. DM_volume_exit:
  526.     move.b    d1,c_actual_volume(a6)
  527.  
  528.     move.w    d1,h_volume(a4)
  529.     rts
  530.  
  531.  
  532. ; ----  INIT MUSIC  ----
  533.  
  534. all_check = 0
  535. trk1      = 4
  536.  
  537.  
  538. DM_init:
  539.     lea    track1(pc),a1
  540.     moveq    #24,d7
  541. DM_init_loop:
  542.     move.l    #data+[26*4],(a1)+
  543.     dbra    d7,DM_init_loop
  544.  
  545.     moveq    #23,d6
  546.     lea    track1+[24*4](pc),a1
  547. DM_init_loop2:
  548.     lea    data+4(pc),a0
  549.     move.l    d6,d7
  550. DM_init_loop3:
  551.     move.l    (a0)+,d0
  552.     add.l    d0,(a1)
  553.     dbra    d7,DM_init_loop3
  554.     subq.l    #4,a1
  555.     dbra    d6,DM_init_loop2
  556.  
  557.     lea    $dff0a0,a0
  558.     lea    channel1(pc),a6
  559.     bsr.s    DM_setup
  560.     add.l    #16,a0
  561.     lea    channel2(pc),a6
  562.     bsr.s    DM_setup
  563.     add.l    #16,a0
  564.     lea    channel3(pc),a6
  565.     bsr.s    DM_setup
  566.     add.l    #16,a0
  567.     lea    channel4(pc),a6
  568.     bsr.s    DM_setup
  569.     move.w    #$8001,channel1+c_dma
  570.     move.w    #$8002,channel2+c_dma
  571.     move.w    #$8004,channel3+c_dma
  572.     move.w    #$8008,channel4+c_dma
  573.     move.l    track1(pc),channel1+c_track
  574.     move.l    track2(pc),channel2+c_track
  575.     move.l    track3(pc),channel3+c_track
  576.     move.l    track4(pc),channel4+c_track
  577.     rts
  578.  
  579. DM_setup:
  580.     move.l    a0,c_hardware(a6)
  581.     move.w    #16,h_length(a0)
  582.     clr.w    h_volume(a0)
  583.     move.l    #safe_zero,c_sounddata(a6)
  584.     clr.w    c_frequency(a6)
  585.     move.l    snd_table(pc),d0
  586.     add.l    #16,d0
  587.     move.l    d0,c_sound_table(a6)
  588.     clr.w    c_sound_table_cnt(a6)
  589.     clr.w    c_track_cnt(a6)
  590.     move.l    blocks(pc),c_block(a6)
  591.     clr.l    c_block_cnt(a6)
  592.     clr.l    c_vibrator_wait(a6)
  593.     clr.l    c_vibrator_freq(a6)
  594.     clr.l    c_frequency_data(a6)
  595.     move.l    #1,c_sustain(a6)
  596.     clr.l    c_bendrate_freq(a6)
  597.     clr.l    c_arpeggio_cnt(a6)
  598.     clr.w    c_effect_data(a6)
  599.     rts
  600.  
  601. ; ----  EFFECT ROUTINES  ----
  602.  
  603. eff0:
  604.     rts
  605. eff1:
  606.     and.b    #15,d0            ; set play speed
  607.     beq.s    eff1_exit
  608.     move.b    d0,play_speed
  609. eff1_exit:
  610.     rts
  611. eff2:
  612.     sub.w    d0,c_bendrate_freq(a6)    ; slide freq up
  613.     rts
  614. eff3:
  615.     add.w    d0,c_bendrate_freq(a6)    ; slide freq down
  616.     rts
  617. eff4:
  618.     tst.b    d0
  619.     beq    led_off
  620.     bset    #1,$bfe001        ; led on/off
  621.     rts
  622. led_off:
  623.     bclr    #1,$bfe001
  624.     rts
  625. eff5:
  626.     move.b    d0,s_vibrator_wait(a5)    ; set vibrator wait
  627.     rts
  628. eff6:
  629.     move.b    d0,s_vibrator_step(a5)    ; set vibrator step
  630.     rts
  631. eff7:
  632.     move.b    d0,s_vibrator_length(a5); set vibrator length
  633.     rts
  634. eff8:
  635.     move.b    d0,s_bendrate(a5)    ; set bendrate
  636.     rts
  637. eff9:
  638.     move.b    d0,s_portamento(a5)    ; set portamento
  639.     rts
  640. effA:
  641.     cmp.b    #65,d0
  642.     bmi.s    effA_con
  643.     move.b    #64,d0
  644. effA_con:
  645.     move.b    d0,s_volume(a5)        ; set volume
  646.     rts
  647. effB:
  648.     move.b    d0,s_arpeggio(a5)    ; set arp 1
  649.     rts
  650. effC:
  651.     move.b    d0,s_arpeggio+1(a5)    ; set arp 2
  652.     rts
  653. effD:
  654.     move.b    d0,s_arpeggio+2(a5)    ; set arp 3
  655.     rts
  656. effE:
  657.     move.b    d0,s_arpeggio+3(a5)    ; set arp 4
  658.     rts
  659. effF:
  660.     move.b    d0,s_arpeggio+4(a5)    ; set arp 5
  661.     rts
  662. eff10:
  663.     move.b    d0,s_arpeggio+5(a5)    ; set arp 6
  664.     rts
  665. eff11:
  666.     move.b    d0,s_arpeggio+6(a5)    ; set arp 7
  667.     rts
  668. eff12:
  669.     move.b    d0,s_arpeggio+7(a5)    ; set arp 8
  670.     rts
  671. eff13:
  672.     move.b    d0,s_arpeggio(a5)    ; set arp 1 / 5
  673.     move.b    d0,s_arpeggio+4(a5)
  674.     rts
  675. eff14:
  676.     move.b    d0,s_arpeggio+1(a5)    ; set arp 2 / 6
  677.     move.b    d0,s_arpeggio+5(a5)
  678.     rts
  679. eff15:
  680.     move.b    d0,s_arpeggio+2(a5)    ; set arp 3 / 7
  681.     move.b    d0,s_arpeggio+6(a5)
  682.     rts
  683. eff16:
  684.     move.b    d0,s_arpeggio+3(a5)    ; set arp 4 / 8
  685.     move.b    d0,s_arpeggio+7(a5)
  686.     rts
  687. eff17:
  688.     cmp.b    #65,d0            ; set attack step
  689.     bmi.s    eff17_con
  690.     move.b    #64,d0
  691. eff17_con:
  692.     move.b    d0,s_attack_step(a5)
  693.     rts
  694. eff18:
  695.     move.b    d0,s_attack_delay(a5)    ; set attack delay
  696.     rts
  697. eff19:
  698.     cmp.b    #65,d0            ; set decay step
  699.     bmi.s    eff19_con
  700.     move.b    #64,d0
  701. eff19_con:
  702.     move.b    d0,s_decay_step(a5)
  703.     rts
  704. eff1A:
  705.     move.b    d0,s_decay_delay(a5)    ; set decay delay
  706.     rts
  707. eff1B:
  708.     move.b    d0,s_sustain(a5)    ; set sustain byte 1
  709.     rts
  710. eff1C:
  711.     move.b    d0,s_sustain+1(a5)    ; set sustain byte 2
  712.     rts
  713. eff1D:
  714.     cmp.b    #65,d0            ; set release step
  715.     bmi.s    eff1D_con
  716.     move.b    #64,d0
  717. eff1D_con:
  718.     move.b    d0,s_release_step(a5)
  719.     rts
  720. eff1E:
  721.     move.b    d0,s_release_delay(a5)    ; set release delay
  722.     rts
  723.  
  724.  
  725. effect_table:
  726.     dc.l    eff0 ,eff1 ,eff2 ,eff3 ,eff4 ,eff5 ,eff6 ,eff7
  727.     dc.l    eff8 ,eff9 ,effA ,effB ,effC ,effD ,effE ,effF
  728.     dc.l    eff10,eff11,eff12,eff13,eff14,eff15,eff16,eff17
  729.     dc.l    eff18,eff19,eff1A,eff1B,eff1C,eff1D,eff1E,eff0
  730.  
  731. play_speed:
  732.     dc.b    speed
  733.     even
  734. safe_zero:
  735.     blk.b    16,0
  736.  
  737. freq_table:
  738.  dc.w    0000,6848,6464,6096,5760,5424,5120,4832,4560,4304,4064,3840
  739.  dc.w    3616,3424,3232,3048,2880,2712,2560,2416,2280,2152,2032,1920
  740.  dc.w    1808,1712,1616,1524,1440,1356,1280,1208,1140,1076,0960,0904
  741.  dc.w    0856,0808,0762,0720,0678,0640,0604,0570,0538,0508,0480,0452
  742.  dc.w    0428,0404,0381,0360,0339,0320,0302,0285,0269,0254,0240,0226
  743.  dc.w    0214,0202,0190,0180,0170,0160,0151,0143,0135,0127,0120,0113
  744.  dc.w    0113,0113,0113,0113,0113,0113,0113,0113,0113,0113,0113,0113
  745.  
  746. channel1:
  747.     dc.l    $dff0a0        ; hardware pointer
  748.     dc.w    $8001        ; DMA value
  749.     dc.l    0        ; instrument pointer
  750.     dc.w    0        ; frequency
  751.     dc.l    0        ; sound table pointer
  752.     dc.b    0        ; sound table counter
  753.     dc.b    0        ; sound table delay
  754.     dc.l    0        ; track pointer
  755.     dc.w    0        ; track counter
  756.     dc.l    0        ; block pointer
  757.     dc.l    0        ; block counter
  758.     dc.b    0        ; vibrator wait
  759.     dc.b    0        ; vib length
  760.     dc.b    0        ; vib position
  761.     dc.b    0        ; vib length + & - (compare)
  762.     dc.w    0        ; vib add freq
  763.     dc.w    0        ; old freq for portamento
  764.     dc.b    0        ; freq_dat
  765.     dc.b    0        ; actual volume
  766.     dc.b    0        ; attack delay
  767.     dc.b    0        ; decay delay
  768.     dc.w    0        ; sustain
  769.     dc.b    0        ; release delay
  770.     dc.b    1        ; play speed
  771.     dc.w    0        ; bendrate freq
  772.     dc.b    0        ; transpose
  773.     dc.b    0        ; status
  774.     dc.b    0        ; arpeggio counter
  775.     dc.b    0        ; arpeggio data
  776.     dc.b    0        ; arpeggio on/off
  777.     dc.b    0        ; effect number
  778.     dc.b    0        ; effect data
  779.     even
  780.  
  781. channel2:
  782.     blk.b    channel2-channel1,0
  783. channel3:
  784.     blk.b    channel2-channel1,0
  785. channel4:
  786.     blk.b    channel2-channel1,0
  787.  
  788. track1:
  789.     dc.l    0
  790. track2:
  791.     dc.l    0
  792. track3:
  793.     dc.l    0
  794. track4:
  795.     dc.l    0
  796. blocks:
  797.     dc.l    0
  798.  
  799. snd_table:
  800.     blk.l    20,0
  801.  
  802. data:
  803.     blk.b    2,0
  804.